Binary Search Example
main.c
#include "bestsoft.h"
int main(struct multiboot *mboot_ptr)
{
clear();
int array[10];
int i, j, num, temp, keynum;
int low, mid, high;
num = 5;
array[0]=23;
array[1]=90;
array[2]=56;
array[3]=15;
array[4]=58;
/* Bubble sorting begins */
for (i = 0; i < num; i++)
{
for (j = 0; j < (num - i - 1); j++)
{
if (array[j] > array[j + 1])
{
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
write("Sorted array is:\n");
for (i = 0; i < num; i++)
{
write("\n");
write_dec(array[i]);
}
//Element to find
keynum=90;
/* Binary searching begins */
low = 1;
high = num;
do
{
mid = (low + high) / 2;
if (keynum < array[mid])
high = mid - 1;
else if (keynum > array[mid])
low = mid + 1;
} while (keynum != array[mid] && low <= high);
if (keynum == array[mid])
{
write("\nSEARCH SUCCESSFUL \n");
write("Number Located at position: ");
write_dec(mid+1);
}
else
{
write("\nSEARCH FAILED! \nNumber not found.");
}
return 0;
}
void write_dec(u32int n)
{
if (n == 0)
{
monitor_put('0');
return;
}
s32int acc = n;
Char c[32];
int i = 0;
while (acc > 0)
{
c[i] = '0' + acc%10;
acc /= 10;
i++;
}
c[i] = 0;
Char c2[32];
c2[i--] = 0;
int j = 0;
while(i >= 0)
{
c2[i--] = c[j++];
}
write(c2);
}